// import _, { debounce } from 'loadsh'; // esModule / babel

// 闭包

const debounce = () => {
  console.log('1', 1)
  // return () => {
  //   console.log('闭包', 1)
  // }
}

// 防抖和截流  闭包 + 用定时器
// 防抖和截流的触发条件  事件

// 截流 做法：
// 1. 时间戳：获取时间，计算时间，完成延时效果；
// 2. 开关； 延时器

// 事件 + 闭包 + 延时器
//
const box = document.documentElement;
// 时间戳的做法；
// const mouseMoveEvent = function(cb, time = 500) {
//   // 1. 获取闭包中的当前的时间戳
//   var date = Date.now(); // 保存在闭包中的时间戳
//   return (e) => {
//     // console.log('e:', e)
//     // 2. 获取当前时间戳 （内部作用域时间戳）
//     var now = Date.now();
//     // 3. 判断两个时间戳直接的间隔是否小于用户的等待时间，
//       // 100 - 500 > 0 ;
//       // 600 - 500 > 0
//       // 100 - 500 < 0
//       // 600 - 500 > 0
//     if (now - date - time >= 0) {
//       // 4. 给予闭包中已经保存的时间戳重新赋值
//       date = now; // 延时器
//       // setTimeout(() => {
//       cb(e, '结果')
//       // }, time)
//     }
//   }
// }
//

// 能保存数据变量的，一般只有对象才可以，函数不可以，除了闭包

// 开发做法：
const mouseMoveEvent = (cb, time = 500) => {
  var timer = null;
  return function() {
    // console.log(arguments, 'arguement')
    // if (timer) return;
    timer = setTimeout(() => {
      cb(arguments)
      timer = null;
      // clearTimeout(timer)
    }, time)
  }
}

box.onmousemove = mouseMoveEvent(([e]) => {
  console.log('res',e)
}, 1500);

// window.addEventListener('mousemove', debounce(() => {
// }, 500))
